package cn.dglydrpy.study.webserver.servlet;

import java.io.RandomAccessFile;

import cn.dglydrpy.study.webserver.core.Constant;
import cn.dglydrpy.study.webserver.http.HttpRequest;
import cn.dglydrpy.study.webserver.http.HttpResponse;

/**
 * 登录业务
 */
public class LoginServlet extends HttpServlet {
	
	public void service(HttpRequest request, HttpResponse response) {
		System.out.println("LoginServlet:开始处理登录...");
		// 1.获取用户名及密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		try (RandomAccessFile raf = new RandomAccessFile(Constant.RESOURCES_DIR+"user.dat", "r");) {
			
			for (int i = 0; i < raf.length() / 100; i++) {
				// 移动指针到该记录的开始位置
				raf.seek(i * 100);
				// 读取用户名
				byte[] data = new byte[32];
				raf.read(data);
				String name = new String(data, "UTF-8").trim();
				// 是不是该用户
				if (name.equals(username)) {
					// 读密码
					raf.read(data);
					String pwd = new String(data, "UTF-8").trim();
					if (pwd.equals(password)) {
						// 登录成功
						// 跳转登录成功的页面
						forward("/myweb/login_success.html", request, response);
						return;
					}
					/*
					 * 只要用户名对了，无论密码是否匹配，都应当停止后续读取工作。
					 * 因为user.dat文件中不存在重复的用户名，减少没有必要的读取操作，提高性能。
					 */
					break;
				}
			}
			// 跳转登录失败的页面
			forward("/myweb/login_fail.html", request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("LoginServlet:处理登录完毕!");
	}
}
